package  
{
	/**
	 * ...
	 * @author ...
	 */
	public final class Polynomial
	{
		public static  function Add( a:Array, b:Array):Array
			{
				var c:Array = new Array();
				c.length = Math.max(a.length, b.length);
				for (var i:int = 0; i < c.length; i ++ )
				{
					if (i < a.length && i < b.length)
					{
						c[i] = a[i] + b[i];
					}
					else if (i< a.length)
					{
						c[i] = a[i];
					}
					else 
					{
						c[i] = b[i];
					}
				}
				return c;
			}
			
		public static function Sub( a:Array, b:Array):Array
			{
				var c:Array = new Array();
				c.length = Math.max(a.length, b.length);
				for (var i:int = 0; i < c.length; i ++ )
				{
					if (i < a.length && i < b.length)
					{
						c[i] = a[i] - b[i];
					}
					else if (i< a.length)
					{
						c[i] = a[i];
					}
					else 
					{
						c[i] = -b[i];
					}
				}
				return c;
			}
			
		public static function Mul( a:Array, b:Array):Array
			{
				var c:Array = new Array();
				c.length = a.length * b.length;
				for (var i:int = 0; i < a.length; i++)
				for (var j:int = 0; j < b.length; j++)
				{
					c[i + j] == null ? c[i + j] = 0 : null;
					c[i + j] += a[i] * b[j];
				}
				return c;
			}
			
		public static function Sqr( a:Array):Array
			{
				return Mul(a, a);
			}
	}


}